home *** CD-ROM | disk | FTP | other *** search
/ Super PC 34 / Super PC 34 (Shareware).iso / spc / UTIL / DJGPP2 / CONTRIB / ASPI.ZIP / scsidefs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-03-25  |  16.3 KB  |  276 lines

  1. /* *************************************************************************** */
  2. /*  */
  3. /*  Name:                        SCSIDEFS.H */
  4. /*  */
  5. /*  Description: SCSI definitions ('C' Language) */
  6. /*  */
  7. /* *************************************************************************** */
  8.  
  9. /* *************************************************************************** */
  10. /*                       %%% TARGET STATUS VALUES %%% */
  11. /* *************************************************************************** */
  12. #define STATUS_GOOD     0x00            /*  Status Good */
  13. #define STATUS_CHKCOND  0x02            /*  Check Condition */
  14. #define STATUS_CONDMET  0x04            /*  Condition Met */
  15. #define STATUS_BUSY     0x08            /*  Busy */
  16. #define STATUS_INTERM   0x10            /*  Intermediate */
  17. #define STATUS_INTCDMET 0x14            /*  Intermediate-condition met */
  18. #define STATUS_RESCONF  0x18            /*  Reservation conflict */
  19. #define STATUS_COMTERM  0x22            /*  Command Terminated */
  20. #define STATUS_QFULL    0x28            /*  Queue full */
  21.  
  22. /* *************************************************************************** */
  23. /*                    %%% SCSI MISCELLANEOUS EQUATES %%% */
  24. /* *************************************************************************** */
  25. #define MAXLUN          7               /*  Maximum Logical Unit Id */
  26. #define MAXTARG         7               /*  Maximum Target Id */
  27. #define MAX_SCSI_LUNS   64              /*  Maximum Number of SCSI LUNs */
  28. #define MAX_NUM_HA      8               /*  Maximum Number of SCSI HA's */
  29.  
  30. /* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */
  31. /*  */
  32. /*                         %%% SCSI COMMAND OPCODES %%% */
  33. /*  */
  34. /* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ */
  35.  
  36. /* *************************************************************************** */
  37. /*                     %%% Commands for all Device Types %%% */
  38. /* *************************************************************************** */
  39. #define SCSI_CHANGE_DEF 0x40            /*  Change Definition (Optional) */
  40. #define SCSI_COMPARE    0x39            /*  Compare (O) */
  41. #define SCSI_COPY       0x18            /*  Copy (O) */
  42. #define SCSI_COP_VERIFY 0x3A            /*  Copy and Verify (O) */
  43. #define SCSI_INQUIRY    0x12            /*  Inquiry (MANDATORY) */
  44. #define SCSI_LOG_SELECT 0x4C            /*  Log Select (O) */
  45. #define SCSI_LOG_SENSE  0x4D            /*  Log Sense (O) */
  46. #define SCSI_MODE_SEL6  0x15            /*  Mode Select 6-byte (Device Specific) */
  47. #define SCSI_MODE_SEL10 0x55            /*  Mode Select 10-byte (Device Specific) */
  48. #define SCSI_MODE_SEN6  0x1A            /*  Mode Sense 6-byte (Device Specific) */
  49. #define SCSI_MODE_SEN10 0x5A            /*  Mode Sense 10-byte (Device Specific) */
  50. #define SCSI_READ_BUFF  0x3C            /*  Read Buffer (O) */
  51. #define SCSI_REQ_SENSE  0x03            /*  Request Sense (MANDATORY) */
  52. #define SCSI_SEND_DIAG  0x1D            /*  Send Diagnostic (O) */
  53. #define SCSI_RCV_DIAG   0x1C            /*  Receive Diagnostic Results (0) */
  54. #define SCSI_TST_U_RDY  0x00            /*  Test Unit Ready (MANDATORY) */
  55. #define SCSI_WRITE_BUFF 0x3B            /*  Write Buffer (O) */
  56.  
  57. /* *************************************************************************** */
  58. /*                 %%% Commands Unique to Direct Access Devices %%% */
  59. /* *************************************************************************** */
  60. #define SCSI_FORMAT     0x04            /*  Format Unit (MANDATORY) */
  61. #define SCSI_LCK_UN_CAC 0x36            /*  Lock Unlock Cache (O) */
  62. #define SCSI_PREFETCH   0x34            /*  Prefetch (O) */
  63. #define SCSI_MED_REMOVL 0x1E            /*  Prevent/Allow medium Removal (O) */
  64. #define SCSI_READ6      0x08            /*  Read 6-byte (MANDATORY) */
  65. #define SCSI_READ10     0x28            /*  Read 10-byte (MANDATORY) */
  66. #define SCSI_RD_CAPAC   0x25            /*  Read Capacity (MANDATORY) */
  67. #define SCSI_RD_DEFECT  0x37            /*  Read Defect Data (O) */
  68. #define SCSI_READ_LONG  0x3E            /*  Read Long (O) */
  69. #define SCSI_REASS_BLK  0x07            /*  Reassign Blocks (O) */
  70. #define SCSI_RELEASE    0x17            /*  Release Unit (MANDATORY) */
  71. #define SCSI_REZERO     0x01            /*  Rezero Unit (O) */
  72. #define SCSI_RESERVE    0x16            /*  Reserve Unit (MANDATORY) */
  73. #define SCSI_SRCH_DAT_E 0x31            /*  Search Data Equal (O) */
  74. #define SCSI_SRCH_DAT_H 0x30            /*  Search Data High (O) */
  75. #define SCSI_SRCH_DAT_L 0x32            /*  Search Data Low (O) */
  76. #define SCSI_SEEK6      0x0B            /*  Seek 6-Byte (O) */
  77. #define SCSI_SEEK10     0x2B            /*  Seek 10-Byte (O) */
  78. #define SCSI_SET_LIMIT  0x33            /*  Set Limits (O) */
  79. #define SCSI_START_STP  0x1B            /*  Start/Stop Unit (O) */
  80. #define SCSI_SYNC_CACHE 0x35            /*  Synchronize Cache (O) */
  81. #define SCSI_VERIFY     0x2F            /*  Verify (O) */
  82. #define SCSI_WRITE6     0x0A            /*  Write 6-Byte (MANDATORY) */
  83. #define SCSI_WRITE10    0x2A            /*  Write 10-Byte (MANDATORY) */
  84. #define SCSI_WRT_VERIFY 0x2E            /*  Write and Verify (O) */
  85. #define SCSI_WRITE_LONG 0x3F            /*  Write Long (O) */
  86. #define SCSI_WRITE_SAME 0x41            /*  Write Same (O) */
  87.  
  88. /* *************************************************************************** */
  89. /*               %%% Commands Unique to Sequential Access Devices %%% */
  90. /* *************************************************************************** */
  91. #define SCSI_ERASE      0x19            /*  Erase (MANDATORY) */
  92. #define SCSI_LOAD_UN    0x1B            /*  Load/Unload (O) */
  93. #define SCSI_LOCATE     0x2B            /*  Locate (O) */
  94. #define SCSI_RD_BLK_LIM 0x05            /*  Read Block Limits (MANDATORY) */
  95. #define SCSI_READ_POS   0x34            /*  Read Position (O) */
  96. #define SCSI_READ_REV   0x0F            /*  Read Reverse (O) */
  97. #define SCSI_REC_BF_DAT 0x14            /*  Recover Buffer Data (O) */
  98. #define SCSI_REWIND     0x01            /*  Rewind (MANDATORY) */
  99. #define SCSI_SPACE      0x11            /*  Space (MANDATORY) */
  100. #define SCSI_VERIFY_T   0x13            /*  Verify (Tape) (O) */
  101. #define SCSI_WRT_FILE   0x10            /*  Write Filemarks (MANDATORY) */
  102. #define SCSI_PARTITION  0x0D            /*  DAT/QFA Partition Select */
  103. #define SCSI_READWRITE  0x06            /*  Set Read/Write Parameters */
  104.  
  105. /* *************************************************************************** */
  106. /*              %%% Commands Unique to Printer Devices %%% */
  107. /* *************************************************************************** */
  108. #define SCSI_PRINT      0x0A            /*  Print (MANDATORY) */
  109. #define SCSI_SLEW_PNT   0x0B            /*  Slew and Print (O) */
  110. #define SCSI_STOP_PNT   0x1B            /*  Stop Print (O) */
  111. #define SCSI_SYNC_BUFF  0x10            /*  Synchronize Buffer (O) */
  112.  
  113. /* *************************************************************************** */
  114. /*                  %%% Commands Unique to Processor Devices %%% */
  115. /* *************************************************************************** */
  116. #define SCSI_RECEIVE    0x08            /*  Receive (O) */
  117. #define SCSI_SEND       0x0A            /*  Send (O) */
  118.  
  119. /* *************************************************************************** */
  120. /*                  %%% Commands Unique to Write-Once Devices %%% */
  121. /* *************************************************************************** */
  122. #define SCSI_MEDIUM_SCN 0x38    /*  Medium Scan (O) */
  123. #define SCSI_SRCHDATE10 0x31    /*  Search Data Equal 10-Byte (O) */
  124. #define SCSI_SRCHDATE12 0xB1    /*  Search Data Equal 12-Byte (O) */
  125. #define SCSI_SRCHDATH10 0x30    /*  Search Data High 10-Byte (O) */
  126. #define SCSI_SRCHDATH12 0xB0    /*  Search Data High 12-Byte (O) */
  127. #define SCSI_SRCHDATL10 0x32    /*  Search Data Low 10-Byte (O) */
  128. #define SCSI_SRCHDATL12 0xB2    /*  Search Data Low 12-Byte (O) */
  129. #define SCSI_SET_LIM_10 0x33    /*  Set Limits 10-Byte (O) */
  130. #define SCSI_SET_LIM_12 0xB3    /*  Set Limits 10-Byte (O) */
  131. #define SCSI_VERIFY10   0x2F    /*  Verify 10-Byte (O) */
  132. #define SCSI_VERIFY12   0xAF    /*  Verify 12-Byte (O) */
  133. #define SCSI_WRITE12    0xAA    /*  Write 12-Byte (O) */
  134. #define SCSI_WRT_VER10  0x2E    /*  Write and Verify 10-Byte (O) */
  135. #define SCSI_WRT_VER12  0xAE    /*  Write and Verify 12-Byte (O) */
  136.  
  137. /* *************************************************************************** */
  138. /*                   %%% Commands Unique to CD-ROM Devices %%% */
  139. /* *************************************************************************** */
  140. #define SCSI_PLAYAUD_10 0x45    /*  Play Audio 10-Byte (O) */
  141. #define SCSI_PLAYAUD_12 0xA5    /*  Play Audio 12-Byte 12-Byte (O) */
  142. #define SCSI_PLAYAUDMSF 0x47    /*  Play Audio MSF (O) */
  143. #define SCSI_PLAYA_TKIN 0x48    /*  Play Audio Track/Index (O) */
  144. #define SCSI_PLYTKREL10 0x49    /*  Play Track Relative 10-Byte (O) */
  145. #define SCSI_PLYTKREL12 0xA9    /*  Play Track Relative 12-Byte (O) */
  146. #define SCSI_READCDCAP  0x25    /*  Read CD-ROM Capacity (MANDATORY) */
  147. #define SCSI_READHEADER 0x44    /*  Read Header (O) */
  148. #define SCSI_SUBCHANNEL 0x42    /*  Read Subchannel (O) */
  149. #define SCSI_READ_TOC   0x43    /*  Read TOC (O) */
  150.  
  151. /* *************************************************************************** */
  152. /*                     %%% Commands Unique to Scanner Devices %%% */
  153. /* *************************************************************************** */
  154. #define SCSI_GETDBSTAT  0x34    /*  Get Data Buffer Status (O) */
  155. #define SCSI_GETWINDOW  0x25    /*  Get Window (O) */
  156. #define SCSI_OBJECTPOS  0x31    /*  Object Postion (O) */
  157. #define SCSI_SCAN       0x1B    /*  Scan (O) */
  158. #define SCSI_SETWINDOW  0x24    /*  Set Window (MANDATORY) */
  159.  
  160. /* *************************************************************************** */
  161. /*               %%% Commands Unique to Optical Memory Devices %%% */
  162. /* *************************************************************************** */
  163. #define SCSI_UpdateBlk  0x3D    /*  Update Block (O) */
  164.  
  165. /* *************************************************************************** */
  166. /*               %%% Commands Unique to Medium Changer Devices %%% */
  167. /* *************************************************************************** */
  168. #define SCSI_EXCHMEDIUM 0xA6    /*  Exchange Medium (O) */
  169. #define SCSI_INITELSTAT 0x07    /*  Initialize Element Status (O) */
  170. #define SCSI_POSTOELEM  0x2B    /*  Position to Element (O) */
  171. #define SCSI_REQ_VE_ADD 0xB5    /*  Request Volume Element Address (O) */
  172. #define SCSI_SENDVOLTAG 0xB6    /*  Send Volume Tag (O) */
  173.  
  174. /* *************************************************************************** */
  175. /*               %%% Commands Unique to Communication Devices %%% */
  176. /* *************************************************************************** */
  177. #define SCSI_GET_MSG_6  0x08    /*  Get Message 6-Byte (MANDATORY) */
  178. #define SCSI_GET_MSG_10 0x28    /*  Get Message 10-Byte (O) */
  179. #define SCSI_GET_MSG_12 0xA8    /*  Get Message 12-Byte (O) */
  180. #define SCSI_SND_MSG_6  0x0A    /*  Send Message 6-Byte (MANDATORY) */
  181. #define SCSI_SND_MSG_10 0x2A    /*  Send Message 10-Byte (O) */
  182. #define SCSI_SND_MSG_12 0xAA    /*  Send Message 12-Byte (O) */
  183.  
  184. /* \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */
  185. /*  */
  186. /*                    %%% END OF SCSI COMMAND OPCODES %%% */
  187. /*  */
  188. /* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ */
  189.  
  190. /* *************************************************************************** */
  191. /*                      %%% Request Sense Data Format %%% */
  192. /* *************************************************************************** */
  193. typedef struct {
  194.  
  195.     char    ErrorCode;              /*  Error Code (70H or 71H) */
  196.     char    SegmentNum;             /*  Number of current segment descriptor */
  197.     char    SenseKey;               /*  Sense Key(See bit definitions too) */
  198.     char    InfoByte0;              /*  Information MSB */
  199.     char    InfoByte1;              /*  Information MID */
  200.     char    InfoByte2;              /*  Information MID */
  201.     char    InfoByte3;              /*  Information LSB */
  202.     char    AddSenLen;              /*  Additional Sense Length */
  203.     char    ComSpecInf0;            /*  Command Specific Information MSB */
  204.     char    ComSpecInf1;            /*  Command Specific Information MID */
  205.     char    ComSpecInf2;            /*  Command Specific Information MID */
  206.     char    ComSpecInf3;            /*  Command Specific Information LSB */
  207.     char    AddSenseCode;           /*  Additional Sense Code */
  208.     char    AddSenQual;             /*  Additional Sense Code Qualifier */
  209. /*       char    FieldRepUCode;          // Field Replaceable Unit Code */
  210. /*       char    SenKeySpec15;           // Sense Key Specific 15th byte */
  211. /*       char    SenKeySpec16;           // Sense Key Specific 16th byte */
  212. /*       char    SenKeySpec17;           // Sense Key Specific 17th byte */
  213. /*       char    AddSenseBytes;          // Additional Sense Bytes */
  214.  
  215. } SENSE_DATA_FMT;
  216.  
  217. /* *************************************************************************** */
  218. /*                       %%% REQUEST SENSE ERROR CODE %%% */
  219. /* *************************************************************************** */
  220. #define SERROR_CURRENT  0x70    /*  Current Errors */
  221. #define SERROR_DEFERED  0x71    /*  Deferred Errors */
  222.  
  223. /* *************************************************************************** */
  224. /*                    %%% REQUEST SENSE BIT DEFINITIONS %%% */
  225. /* *************************************************************************** */
  226. #define SENSE_VALID     0x80    /*  Byte 0 Bit 7 */
  227. #define SENSE_FILEMRK   0x80    /*  Byte 2 Bit 7 */
  228. #define SENSE_EOM       0x40    /*  Byte 2 Bit 6 */
  229. #define SENSE_ILI       0x20    /*  Byte 2 Bit 5 */
  230.  
  231. /* *************************************************************************** */
  232. /*              %%% REQUEST SENSE SENSE KEY DEFINITIONS %%% */
  233. /* *************************************************************************** */
  234. #define KEY_NOSENSE     0x00    /*  No Sense */
  235. #define KEY_RECERROR    0x01    /*  Recovered Error */
  236. #define KEY_NOTREADY    0x02    /*  Not Ready */
  237. #define KEY_MEDIUMERR   0x03    /*  Medium Error */
  238. #define KEY_HARDERROR   0x04    /*  Hardware Error */
  239. #define KEY_ILLGLREQ    0x05    /*  Illegal Request */
  240. #define KEY_UNITATT     0x06    /*  Unit Attention */
  241. #define KEY_DATAPROT    0x07    /*  Data Protect */
  242. #define KEY_BLANKCHK    0x08    /*  Blank Check */
  243. #define KEY_VENDSPEC    0x09    /*  Vendor Specific */
  244. #define KEY_COPYABORT   0x0A    /*  Copy Abort */
  245. #define KEY_ABORT       0x0B    /*  Abort */
  246. #define KEY_EQUAL       0x0C    /*  Equal (Search) */
  247. #define KEY_VOLOVRFLW   0x0D    /*  Volume Overflow */
  248. #define KEY_MISCOMP     0x0E    /*  Miscompare (Search) */
  249. #define KEY_RESERVED    0x0F    /*  Reserved */
  250.  
  251. /* *************************************************************************** */
  252. /*             %%% PERIPHERAL DEVICE TYPE DEFINITIONS %%% */
  253. /* *************************************************************************** */
  254. #define DTYPE_DASD      0x00    /*  Disk Device */
  255. #define DTYPE_SEQD      0x01    /*  Tape Device */
  256. #define DTYPE_PRNT      0x02    /*  Printer */
  257. #define DTYPE_PROC      0x03    /*  Processor */
  258. #define DTYPE_WORM      0x04    /*  Write-once read-multiple */
  259. #define DTYPE_CROM      0x05    /*  CD-ROM device */
  260. #define DTYPE_SCAN      0x06    /*  Scanner device */
  261. #define DTYPE_OPTI      0x07    /*  Optical memory device */
  262. #define DTYPE_JUKE      0x08    /*  Medium Changer device */
  263. #define DTYPE_COMM      0x09    /*  Communications device */
  264. #define DTYPE_RESL      0x0A    /*  Reserved (low) */
  265. #define DTYPE_RESH      0x1E    /*  Reserved (high) */
  266. #define DTYPE_UNKNOWN   0x1F    /*  Unknown or no device type */
  267.  
  268. /* *************************************************************************** */
  269. /*              %%% ANSI APPROVED VERSION DEFINITIONS %%% */
  270. /* *************************************************************************** */
  271. #define ANSI_MAYBE       0x0     /*  Device may or may not be ANSI approved stand */
  272. #define ANSI_SCSI1       0x1     /*  Device complies to ANSI X3.131-1986 (SCSI-1) */
  273. #define ANSI_SCSI2       0x2     /*  Device complies to SCSI-2 */
  274. #define ANSI_RESLO       0x3     /*  Reserved (low) */
  275. #define ANSI_RESHI       0x7     /*  Reserved (high) */
  276.